package dns

// RecordType 表示 DNS 记录类型
type RecordType string

// DNS 记录类型常量
const (
	RTypeA     RecordType = "A"     // IPv4 地址
	RTypeAAAA  RecordType = "AAAA"  // IPv6 地址
	RTypeCNAME RecordType = "CNAME" // 规范名称
	RTypeMX    RecordType = "MX"    // 邮件交换
	RTypeTXT   RecordType = "TXT"   // 文本记录
	RTypeNS    RecordType = "NS"    // 名称服务器
	RTypeSOA   RecordType = "SOA"   // 权威起始
	RTypeSRV   RecordType = "SRV"   // 服务定位
	RTypePTR   RecordType = "PTR"   // 指针
	RTypeCAA   RecordType = "CAA"   // 证书颁发机构授权
)

// DNSRecord 表示一条 DNS 记录
type DNSRecord struct {
	Type  RecordType `json:"type"`  // 记录类型
	Name  string     `json:"name"`  // 记录名称
	Value string     `json:"value"` // 记录值
	TTL   int        `json:"ttl"`   // 生存时间（秒）
}

// MXRecord 表示 MX 记录
type MXRecord struct {
	Host     string `json:"host"`     // 邮件服务器主机名
	Priority int    `json:"priority"` // 优先级
	TTL      int    `json:"ttl"`      // 生存时间（秒）
}

// SRVRecord 表示 SRV 记录
type SRVRecord struct {
	Target   string `json:"target"`   // 目标主机
	Port     int    `json:"port"`     // 端口
	Priority int    `json:"priority"` // 优先级
	Weight   int    `json:"weight"`   // 权重
	TTL      int    `json:"ttl"`      // 生存时间（秒）
}

// SOARecord 表示 SOA 记录
type SOARecord struct {
	NSName     string `json:"ns_name"`     // 主要名称服务器
	AdminEmail string `json:"admin_email"` // 管理员邮箱
	Serial     uint32 `json:"serial"`      // 序列号
	Refresh    int    `json:"refresh"`     // 刷新间隔
	Retry      int    `json:"retry"`       // 重试间隔
	Expire     int    `json:"expire"`      // 过期时间
	MinTTL     int    `json:"min_ttl"`     // 最小 TTL
	TTL        int    `json:"ttl"`         // 生存时间（秒）
}

// CAARecord 表示 CAA 记录
type CAARecord struct {
	Flag  int    `json:"flag"`  // 标志
	Tag   string `json:"tag"`   // 标签
	Value string `json:"value"` // 值
	TTL   int    `json:"ttl"`   // 生存时间（秒）
}
